var num1 = '12345678901234567890123456781234567890123456789012345678901234123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789056789012345678901234567890123456789090123456789012345678901234567890',
    num2 = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; 
// console.log(num1 + num2);

// 大数相加 数字超过语言的计算范围
// 两数相加 
// 123
//  48
// 171
// 在内存中表达， 数字型Number Infinity 最后一位，相加，

function addTwoNumber(str1, str2) {
    // 1.字符串从尾部到首部 
    // 2.两个数的位数是不一样的
    var carry = 0, // 进位 计算每一个回合的进位
        l1 = str1.length,
        l2 = str2.length,
        arr = []; // 放结果
    var max = Math.max(l1, l2); // 不一样长
    // 最多进行多少次计算 n
    for(var i = l1-1, j = l2-1, n = max-1; n>=0 ; n--, i--, j--) {
        var sum = (+str1[i] || 0) + (+str2[j] || 0) + carry; // 每一次的相加和
        // console.log(sum);
        // break;
        if(sum >= 10) {
            carry = 1;
            arr.push(sum-10);
        }else {
            carry = 0;
            arr.push(sum);
        }
    }
    if(carry > 0) {
        arr.push(carry);
    }
    return arr.reverse().join('');
}
console.log(addTwoNumber(num1, num2));